#include <iostream>
#include <fstream>
#include "config.h"

using namespace std;

bool Config::was_created(){
	name = ".config";
	ifile.open(name.c_str(), ifstream::out);
	if(ifile.good()) {
		ifile.close();
		return true;
	}
	else {
		ifile.close();
		return false;
	}
}

void Config::writeconfig(){
	if((shield>=3 && shield <=9 )|| shield==12){
		for(int i=0; i<(int)config_list.size(); i++){
			if(i==0) {cout << "Shield option: " << config_list[i] << "\n";}
			else if(i==1 && config_list[1]!="") {cout << "Size: " << config_list[1] << "\n";}
			else if(i==2 && config_list[2]!="") {cout << "Extensions: " << config_list[2] << "\n";}
			else if(i==3 && config_list[3]!="") {cout << "Names: " << config_list[3] << "\n";}
			else if(i==4 && config_list[4]!="") {cout << "Subfolders: " << config_list[4] << "\n";}
		}
	}
}

void Config::create_config(){
	if(was_created()){
		ifile.open(name.c_str(), ios::in);
		string in;
		while(ifile.good()){
			getline(ifile, in);
			config_list.push_back(in);
		}
		ifile.close();
		edit();
		ofile.open(name.c_str(), ios::out | ios::trunc);
		for(int i=0; i<(int)config_list.size(); i++) {
			ofile << config_list[i];
			if(i+1!=(int)config_list.size()) ofile << "\n";
		}
		ofile.close();
		writeconfig();
	}
	else{
		config_list.push_back("off");
		for(int i=0; i<3; i++) config_list.push_back("");
		edit();
		ofile.open(name.c_str(), ios::out);
		for(int i=0; i<(int)config_list.size(); i++) {
			ofile << config_list[i];
			if(i+1!=(int)config_list.size()) ofile << "\n";
		}
		ofile.close();
		writeconfig();
	}
}
void Config::edit(){
	if(shield==3){
		config_list[0]="on";
	}
	else if(shield==4){
		config_list[0]="off";
	}
	else if(shield==5){
		while(!config_list.empty()){
			config_list.pop_back();
		}
		config_list.push_back("off");
		for(int i=0; i<3; i++) config_list.push_back("");
	}
	else if(shield==6){
		if((int)config_list.size()==1) config_list.push_back(arguments[2]);
		else config_list[1]=arguments[2];
	}
	else if(shield==7){
		shieldopt(2);
	}
	else if(shield==8){
		shieldopt(3);
	}
	else if(shield==9){
		shieldopt(4);
	}
}

void Config::shieldopt(int shieldopt){
	if((int)config_list.size()==shieldopt) config_list.push_back(arguments[2]);
	else {
		if(config_list[shieldopt]!=arguments[2]){
			if(config_list[shieldopt]!="") config_list[shieldopt]+=" "+arguments[2];
			else config_list[shieldopt]=arguments[2];
		}
	}
}

